/*
 * Buffer.h
 *
 *  Created on: 18/09/2012
 *      Author: rcasal
 */

#ifndef BUFFER_H_
#define BUFFER_H_

#include <iostream>
#include <string>
#include <exception>
#include <queue>
#include "../Comunes/Entidades/RecordTermino.h"

using namespace std;

namespace ordenamiento {

class Buffer {
	string * datos;		//vector de string donde estan los datos
	int tam_max;		//tamanio maximo soportado
	int cant_datos;		//cantidad de datos almacenados
	string* getDatos();
public:
	Buffer();
	Buffer(int tam_max);
	//setea el maximo
	void set(int tam_max);
	//intercambia los datos entre dos posiciones
	void swap(int pos1, int pos2);
	//agrega un dato al final
	void addDato(string dato);
	//agrega un dato en la posicion pos
	void addDato(int pos, string dato);
	//borra el contenido del buffer y setea cant_datos = 0
	void vaciar();
	//devuelve el tamanio maximo que soporta el buffer
	int getCapacidad();
	//devuelve la cantidad de elementos almacenados
	int getCantidad();
	//devuelve un dato segun la posicion pos
	string getDato(int pos);
	//devuelve el contenido del buffer en un string
	string toString();
	//true si la cantidad almacenada es cero - false si es mayor
	bool isEmpty();
	//destruye el buffer
	virtual ~Buffer();
};


class QBuffer{
	int capacity;
	queue<RecordTermino> registros;
public:
	QBuffer();
	QBuffer(int capacity);
	void setCapacity(int capacity);
	void popRecord();
	RecordTermino getRecord();
	void pushRecord(RecordTermino r);
	bool empty();
	int size();
	virtual ~QBuffer();
};

} /* namespace ordenamiento */
#endif /* BUFFER_H_ */
